Facturación de electricidad conforme al PVPC

Simulación de la facturación eléctrica para instalaciones monofásicas de potencia contratada ≤ 10 kW y voltaje < 1kV (instalaciones típicas de particulares) Admite como entrada consumos totales (tantos como periodos de discriminación horaria en la tarifa seleccionada) o bien consumos horarios. También genera consumos horarios en base a mediciones totales, usando los perfiles de consumo del PVPC, y genera el CSV de consumo horario conforme al formato utilizado por las distribuidoras.

Facturas:


In [1]:
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
import matplotlib.pyplot as plt
from esiosdata import FacturaElec
from esiosdata.facturapvpc import (TIPO_PEAJE_GEN, TIPO_PEAJE_NOC, TIPO_PEAJE_VHC, 
                                   ZONA_IMPUESTOS_PENIN_BALEARES, ZONA_IMPUESTOS_CANARIAS)
from esiosdata.prettyprinting import *


t_0, t_f = '2016-11-01', '2017-01-05'
f1 = FacturaElec(t_0, t_f, tipo_peaje=TIPO_PEAJE_VHC, consumo=[219, 126, 154],
                 zona_impuestos=ZONA_IMPUESTOS_PENIN_BALEARES)
print_ok(f1)


FACTURA ELÉCTRICA:
--------------------------------------------------------------------------------
* Fecha inicio             	01/11/2016
* Fecha final              	05/01/2017
* Peaje de acceso          	2.0DHS (Vehículo eléctrico)
* Potencia contratada      	3.45 kW
* Consumo periodo          	499.00 kWh
* ¿Bono Social?            	No
* Equipo de medida         	1.73 €
* Impuestos                	Península y Baleares (IVA)
* Días facturables         	65
--------------------------------------------------------------------------------

- CÁLCULO DEL TÉRMINO FIJO POR POTENCIA CONTRATADA:
    3.45 kW * 42.043426 €/kW/año * 60 días (2016) / 366 = 23.78 €
    3.45 kW * 41.156426 €/kW/año * 5 días (2017) / 365 = 1.95 €
     -> Término fijo                                                   25.72 €

- CÁLCULO DEL TÉRMINO VARIABLE POR ENERGÍA CONSUMIDA (TARIFA 2.0DHS):
   *Tramo 1, de 01/11/2016 a 31/12/2016:
    Periodo 1: 0.151329 €/kWh                          -> 30.51€(P1)
    - Peaje de acceso: 202kWh * 0.062012€/kWh = 12.50€
    - Coste de la energía: 202kWh * 0.089317€/kWh = 18.01€
    Periodo 2: 0.080943 €/kWh                          -> 9.32€(P2)
    - Peaje de acceso: 115kWh * 0.002879€/kWh = 0.33€
    - Coste de la energía: 115kWh * 0.078064€/kWh = 8.99€
    Periodo 3: 0.062982 €/kWh                          -> 8.90€(P3)
    - Peaje de acceso: 141kWh * 0.000886€/kWh = 0.13€
    - Coste de la energía: 141kWh * 0.062096€/kWh = 8.78€
   *Tramo 2, de 01/01/2017 a 05/01/2017:
    Periodo 1: 0.157608 €/kWh                          -> 2.74€(P1)
    - Peaje de acceso: 17kWh * 0.062012€/kWh = 1.08€
    - Coste de la energía: 17kWh * 0.095596€/kWh = 1.66€
    Periodo 2: 0.088722 €/kWh                          -> 0.96€(P2)
    - Peaje de acceso: 11kWh * 0.002879€/kWh = 0.03€
    - Coste de la energía: 11kWh * 0.085843€/kWh = 0.93€
    Periodo 3: 0.069366 €/kWh                          -> 0.88€(P3)
    - Peaje de acceso: 13kWh * 0.000886€/kWh = 0.01€
    - Coste de la energía: 13kWh * 0.068480€/kWh = 0.87€
     -> Término de consumo                                             53.31 €

- IMPUESTO ELÉCTRICO:
    5.11269632% x (25.72€ + 53.31€)                                    4.04 €

- EQUIPO DE MEDIDA:                                                    1.73 €

- IVA O EQUIVALENTE:
    21% de 84.80€                                                      17.81 €

################################################################################
# TOTAL FACTURA                                                        102.61 €
################################################################################

Cambios de tarifa:


In [2]:
f1.tipo_peaje = 2
print_info(f1)

f1.tipo_peaje = 'GEN'
print_cyan(f1)


FACTURA ELÉCTRICA:
--------------------------------------------------------------------------------
* Fecha inicio             	01/11/2016
* Fecha final              	05/01/2017
* Peaje de acceso          	2.0DHA (Nocturna)
* Potencia contratada      	3.45 kW
* Consumo periodo          	499.00 kWh
* ¿Bono Social?            	No
* Equipo de medida         	1.73 €
* Impuestos                	Península y Baleares (IVA)
* Días facturables         	65
--------------------------------------------------------------------------------

- CÁLCULO DEL TÉRMINO FIJO POR POTENCIA CONTRATADA:
    3.45 kW * 42.043426 €/kW/año * 60 días (2016) / 366 = 23.78 €
    3.45 kW * 41.156426 €/kW/año * 5 días (2017) / 365 = 1.95 €
     -> Término fijo                                                   25.72 €

- CÁLCULO DEL TÉRMINO VARIABLE POR ENERGÍA CONSUMIDA (TARIFA 2.0DHA):
   *Tramo 1, de 01/11/2016 a 31/12/2016:
    Periodo 1: 0.151056 €/kWh                          -> 27.28€(P1)
    - Peaje de acceso: 181kWh * 0.062012€/kWh = 11.20€
    - Coste de la energía: 181kWh * 0.089044€/kWh = 16.08€
    Periodo 2: 0.071876 €/kWh                          -> 19.94€(P2)
    - Peaje de acceso: 277kWh * 0.002215€/kWh = 0.61€
    - Coste de la energía: 277kWh * 0.069661€/kWh = 19.33€
   *Tramo 2, de 01/01/2017 a 05/01/2017:
    Periodo 1: 0.157868 €/kWh                          -> 2.42€(P1)
    - Peaje de acceso: 15kWh * 0.062012€/kWh = 0.95€
    - Coste de la energía: 15kWh * 0.095856€/kWh = 1.47€
    Periodo 2: 0.078674 €/kWh                          -> 2.01€(P2)
    - Peaje de acceso: 26kWh * 0.002215€/kWh = 0.06€
    - Coste de la energía: 26kWh * 0.076459€/kWh = 1.95€
     -> Término de consumo                                             51.66 €

- IMPUESTO ELÉCTRICO:
    5.11269632% x (25.72€ + 51.66€)                                    3.96 €

- EQUIPO DE MEDIDA:                                                    1.73 €

- IVA O EQUIVALENTE:
    21% de 83.07€                                                      17.44 €

################################################################################
# TOTAL FACTURA                                                        100.51 €
################################################################################

FACTURA ELÉCTRICA:
--------------------------------------------------------------------------------
* Fecha inicio             	01/11/2016
* Fecha final              	05/01/2017
* Peaje de acceso          	2.0A (General)
* Potencia contratada      	3.45 kW
* Consumo periodo          	499.00 kWh
* ¿Bono Social?            	No
* Equipo de medida         	1.73 €
* Impuestos                	Península y Baleares (IVA)
* Días facturables         	65
--------------------------------------------------------------------------------

- CÁLCULO DEL TÉRMINO FIJO POR POTENCIA CONTRATADA:
    3.45 kW * 42.043426 €/kW/año * 60 días (2016) / 366 = 23.78 €
    3.45 kW * 41.156426 €/kW/año * 5 días (2017) / 365 = 1.95 €
     -> Término fijo                                                   25.72 €

- CÁLCULO DEL TÉRMINO VARIABLE POR ENERGÍA CONSUMIDA (TARIFA 2.0A):
   *Tramo 1, de 01/11/2016 a 31/12/2016:
    Periodo 1: 0.125623 €/kWh                          -> 57.55€(P1)
    - Peaje de acceso: 458kWh * 0.044027€/kWh = 20.17€
    - Coste de la energía: 458kWh * 0.081596€/kWh = 37.38€
   *Tramo 2, de 01/01/2017 a 05/01/2017:
    Periodo 1: 0.132566 €/kWh                          -> 5.42€(P1)
    - Peaje de acceso: 41kWh * 0.044027€/kWh = 1.80€
    - Coste de la energía: 41kWh * 0.088539€/kWh = 3.62€
     -> Término de consumo                                             62.97 €

- IMPUESTO ELÉCTRICO:
    5.11269632% x (25.72€ + 62.97€)                                    4.53 €

- EQUIPO DE MEDIDA:                                                    1.73 €

- IVA O EQUIVALENTE:
    21% de 94.95€                                                      19.94 €

################################################################################
# TOTAL FACTURA                                                        114.89 €
################################################################################

Consumo horario:


In [3]:
consumo_horario = f1.consumo_horario
print_ok('Consumo horario [{}]: {} horas, TOTAL={:.2f} kWh\nHead:\n{}\nTail:{}'
         .format(type(consumo_horario), len(consumo_horario), consumo_horario.sum(), 
                 consumo_horario.head(), consumo_horario.tail()))


Consumo horario [<class 'pandas.core.series.Series'>]: 1560 horas, TOTAL=499.00 kWh
Head:
fecha
2016-11-02 00:00:00+01:00    0.375806
2016-11-02 01:00:00+01:00    0.405489
2016-11-02 02:00:00+01:00    0.388756
2016-11-02 03:00:00+01:00    0.373022
2016-11-02 04:00:00+01:00    0.365404
Name: kWh, dtype: float64
Tail:fecha
2017-01-05 19:00:00+01:00    0.618926
2017-01-05 20:00:00+01:00    0.633574
2017-01-05 21:00:00+01:00    0.620795
2017-01-05 22:00:00+01:00    0.555414
2017-01-05 23:00:00+01:00    0.474396
Name: kWh, dtype: float64

Factura a partir de consumo horario:


In [4]:
f2 = FacturaElec(consumo=consumo_horario)
f2


Out[4]:
FACTURA ELÉCTRICA:
--------------------------------------------------------------------------------
* Fecha inicio             	01/11/2016
* Fecha final              	05/01/2017
* Peaje de acceso          	2.0A (General)
* Potencia contratada      	3.45 kW
* Consumo periodo          	499.00 kWh
* ¿Bono Social?            	No
* Equipo de medida         	1.73 €
* Impuestos                	Península y Baleares (IVA)
* Días facturables         	65
--------------------------------------------------------------------------------

- CÁLCULO DEL TÉRMINO FIJO POR POTENCIA CONTRATADA:
    3.45 kW * 42.043426 €/kW/año * 60 días (2016) / 366 = 23.78 €
    3.45 kW * 41.156426 €/kW/año * 5 días (2017) / 365 = 1.95 €
     -> Término fijo                                                   25.72 €

- CÁLCULO DEL TÉRMINO VARIABLE POR ENERGÍA CONSUMIDA (TARIFA 2.0A):
   *Tramo 1, de 01/11/2016 a 31/12/2016:
    Periodo 1: 0.125623 €/kWh                          -> 57.55€(P1)
    - Peaje de acceso: 458kWh * 0.044027€/kWh = 20.17€
    - Coste de la energía: 458kWh * 0.081596€/kWh = 37.38€
   *Tramo 2, de 01/01/2017 a 05/01/2017:
    Periodo 1: 0.132566 €/kWh                          -> 5.42€(P1)
    - Peaje de acceso: 41kWh * 0.044027€/kWh = 1.80€
    - Coste de la energía: 41kWh * 0.088539€/kWh = 3.62€
     -> Término de consumo                                             62.97 €

- IMPUESTO ELÉCTRICO:
    5.11269632% x (25.72€ + 62.97€)                                    4.53 €

- EQUIPO DE MEDIDA:                                                    1.73 €

- IVA O EQUIVALENTE:
    21% de 94.95€                                                      19.94 €

################################################################################
# TOTAL FACTURA                                                        114.89 €
################################################################################

Reparto de la facturación en otros intervalos:


In [5]:
# Reparto en varias facturas:
import datetime as dt

consumo_total = f2.consumo_horario
t0, tf = consumo_total.index[0].date(), consumo_total.index[-1].date()
div_dias = f2.num_dias_factura // 3
# print(t0, tf, div_dias, f2.num_dias_factura)

c1 = consumo_total.loc[:t0 + dt.timedelta(days=div_dias)].iloc[:-1]
c2 = consumo_total.loc[t0 + dt.timedelta(days=div_dias): t0 + dt.timedelta(days=2*div_dias)].iloc[:-1]
c3 = consumo_total.loc[t0 + dt.timedelta(days=2*div_dias):]
assert c1.shape[0] + c2.shape[0] + c3.shape[0] == consumo_total.shape[0]

facturas = [FacturaElec(consumo=c) for c in [c1, c2, c3]]
print_ok(sum([f.coste_total for f in facturas]))
print_ok(f2.coste_total)


114.9
114.89

Exportación a dict

Para disponer de las variables asociadas a la factura como un objeto estándar 'JSON serializable'


In [8]:
import json

d_factura = f2.to_dict()
print_ok(d_factura)

print_info(json.dumps(d_factura))


{'desc_impuesto': 'Península y Baleares (IVA)', 'coste_termino_fijo': 25.72, 'coste_medida': 1.73, 'descuento_bono_social': 0.0, 'ts_ini': '2016-11-01', 'coste_termino_consumo': 62.97, 'coste_iva': 19.94, 'con_bono': False, 'coste_impuesto_elec': 4.53, 'periodos_fact': ([(60, 366, 2016, 23.77865896721311, 42.043426), (5, 365, 2017, 1.9450639684931508, 41.156426)],), 'dias_fact': 65, 'cod_peaje': '2.0A', 'impuesto_elec': 5.11269632, 'p_contrato': 3.45, 'tipos_iva': (0.21, 0.21), 'tea_tcu_consumo': [((20.17,), (37.38,), (458.09,)), ((1.8,), (3.62,), (40.91,))], 'total_factura': 114.89, 'consumo_total': 499.0, 'ts_fin': '2017-01-05', 'cups': 'ES00XXXXXXXXXXXXXXDB', 'desc_peaje': 'General'}
{"desc_impuesto": "Pen\u00ednsula y Baleares (IVA)", "coste_termino_fijo": 25.72, "coste_medida": 1.73, "descuento_bono_social": 0.0, "ts_ini": "2016-11-01", "coste_termino_consumo": 62.97, "coste_iva": 19.94, "con_bono": false, "coste_impuesto_elec": 4.53, "periodos_fact": [[[60, 366, 2016, 23.77865896721311, 42.043426], [5, 365, 2017, 1.9450639684931508, 41.156426]]], "dias_fact": 65, "cod_peaje": "2.0A", "impuesto_elec": 5.11269632, "p_contrato": 3.45, "tipos_iva": [0.21, 0.21], "tea_tcu_consumo": [[[20.17], [37.38], [458.09]], [[1.8], [3.62], [40.91]]], "total_factura": 114.89, "consumo_total": 499.0, "ts_fin": "2017-01-05", "cups": "ES00XXXXXXXXXXXXXXDB", "desc_peaje": "General"}

Exportación a HTML

Para generar, o bien una página web 'completa' con la representación de la factura eléctrica, o bien el HTML mínimo con el contenido de la factura, para integrarlo dentro de la página web general


In [19]:
from ipywidgets import HTML, Layout

# Html simple, para incluir en otra web
HTML(f2.to_html(), layout=Layout(width='75%'))

In [17]:
# Página web completa:
HTML(f2.to_html(web_completa=True), layout=Layout(width='75%'))

In [ ]: